package com.iot.ammeter.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * @ClassName: Swagger2Configuration
 * @Author: Basil
 * @Date: 2021/9/26 下午2:55
 * @Version: 1.0
 * @Description: swagger2 文档配置类，配置控制层对应的模块
 **/
@Configuration
public class Swagger2Config {

    //版本
    public static final String VERSION = "1.0.0";

    /**
     * 用户模块->web
     *
     * @return
     */
    @Bean
    public Docket WebUserApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.user"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("用户模块->web");
    }

    /**
     * 用户模块->app
     *
     * @return
     */
    @Bean
    public Docket AppUserApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.android"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("用户模块->app");
    }

    /**
     * 角色模块
     *
     * @return
     */
    @Bean
    public Docket RoleApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.role"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("角色模块");
    }

    /**
     * 服务商模块
     *
     * @return
     */
    @Bean
    public Docket ProviderApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.provider"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("服务商模块");
    }

    /**
     * 校区模块
     *
     * @return
     */
    @Bean
    public Docket CampusApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.campus"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("校区模块");
    }

    /**
     * 设备管理模块
     *
     * @return
     */
    @Bean
    public Docket EquipmentManage() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.equipment"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("设备管理模块");
    }

    /**
     * 费用管理
     *
     * @return
     */
    @Bean
    public Docket PayApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.pay"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("费用管理");
    }


    /**
     * 其它模块
     *
     * @return
     */
    @Bean
    public Docket OtherApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.other"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("其它");
    }

    /**
     * 设置管理
     *
     * @return
     */
    @Bean
    public Docket SettingApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(userApiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.iot.ammeter.controller.setting"))
                // 可以根据url路径设置哪些请求加入文档，忽略哪些请求
                .paths(PathSelectors.any())
                .build()
                .groupName("设置");
    }

    /**
     * 用户信息
     *
     * @return
     */
    private ApiInfo userApiInfo() {
        return new ApiInfoBuilder()
                //设置文档的标题
                .title("智能电表系统接口")
                // 设置文档的描述
                .description("智能电表系统接口")
                // 设置文档的版本信息-> 1.0.0 Version information
                .version(VERSION)
                .build();
    }

}
